1. L’attaccante scrive un messaggio da pubblicare su un sito e lo struttura in maniera tale che contenga
uno script (dello stesso tipo dell’attacco precedente).
Es.: Ciao! <script> JS… </script>
2. Il server riceve l’input dell’attaccante e lo salva nel suo database.
3. Quando un utente richiede la pagina in cui è stato pubblicato il messaggio dell’attaccante riceve
anche lo script che viene eseguito dal browser. Tale script accede al cookie e lo invia all’attaccante.
Per evitare questo attacco sarebbe necessario filtrare gli input, bloccando tutti quelli contenenti script.
Sono nati però di conseguenza degli attacchi al parsing: si scrivono script in moltissimi modi ed in maniera
tale da nasconderlo. In questo modo non è semplice per il server riconoscerli tutti.
DOM-based XSS
DOM: l’HTML della pagina viene salvato all’interno di document.body, ma ci sono altri campi del DOM (es.:
document.URL, document.location, document.referrer) che contengono altre informazioni. Un’attaccante
potrebbe scrivere allora degli script riferiti a questi altri oggetti.
DOM-based XSS: attacco cross site scripting in cui l’attaccante mira a modificare il DOM nel browser della
vittima attraverso l’esecuzione di uno script lato client. In questo modo la pagina non cambia, ma lo script
dell’attaccante viene comunque eseguito.
Es.: codice conteneste uno script che permette all’utente di selezionare la propria lingua preferita. Una di
queste opzioni viene scelta di default, pertanto, la richiesta della pagina corrisponde alla seguente URL:
http://www.some.site/page.html?default=French
L’attaccante manda invece il seguente link alla sua vittima:
http://www.some.site/page.html?default=<script>alert(document.cookie)</script>
Quando la vittima clicka sul link, il browser manda la richiesta al server, il quale risponde inviando
page.html, la quale contiene lo script di scelta della lingua. Il browser crea quindi l’oggetto DOM associato
alla pagina ed inserisce, all’interno di document.location, il link inviato dall’attaccante. Infine il browser
esegue gli script, compreso quello contenuto in document.location, il quale recupera il cookie.
Cross Site RequestForgery (XSRF)
Obiettivo dell’attaccante: eseguire malware verso un sito web utilizzando i permessi di un determinato
utente.
Per questioni di sicurezza si potrebbe bloccare l’accesso a document.cookie, in questo modo l’attaccante
non sarebbe più in grado di rubarlo. È però sempre possibile impersonificare l’utente: invece che inviare
uno script per prendere il cookie se ne può inviare uno che faccia direttamente le operazioni che
l’attaccante vuole svolgere sul sito con i permessi di quell’utente (es.: effettuare un bonifico bancario).
Due modalità:
Reflected XSRF: la vittima deve visitare il sito web dell’attaccante, il quale contiene delle azioni
nascoste verso il sito target. Contemporaneamente, la vittima aver stabilito una connessione sicura
verso il sito target, così che le operazioni svolte dallo script dell’attaccante arrivino al server passando
attraverso a questa connessione sicura.